home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 176-200 / disk_184 / world / verbs1.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  30KB  |  1,433 lines

  1. #include "parame.inc"
  2. #include "variab.h"
  3. #include "arrays.h"
  4.  
  5. /* World C Version 1.00 copyright 1987 J.D.McDonald 
  6.    Use as you like for non-commercial purposes, but please
  7.    leave this note, and document any changes you make as yours */
  8.  
  9.  
  10. vattac()
  11. {
  12.     int             i, spk, cplce, n, plce;
  13.     /*
  14.      * "attach" or "tie"   not "attack" a mess since it involves the wire  
  15.      */
  16.  
  17.     if (dobjs[0] == CABLE && iobj == ANTENN) {
  18.     if (loc != 69)
  19.         spk = 379;
  20.     else if (obloc[GCABLE] == 2000 + ZANTEN || obloc[DCABLE] == 2000 + ZANTEN)
  21.         spk = 381;
  22.     else {
  23.         n = getobj(dobjs[0], doadjs[0]);
  24.         if (n <= 0)
  25.         spk = 70;
  26.         else {
  27.         itsher(n, &cplce);
  28.         if (cplce != 1 && cplce != 3 && cplce != 4)
  29.             spk = 380;
  30.         else {
  31.             obloc[n] = 2000 + ZANTEN;
  32.             spk = 75;
  33.         }
  34.         }
  35.     }
  36.     } else if (dobjs[0] != WIRE)
  37.     spk = 48;
  38.     else if (iobj == TREE || iobj == LOG || iobj == STOOL)
  39.     spk = 204;
  40.     else if (iobj != KNOB && iobj != TOWER)
  41.     spk = 48;
  42.     else {
  43.     itsher(ZWIRE, &plce);
  44.     if (plce == 0)
  45.         spk = 213;
  46.     else if (iobj == TOWER) {
  47.         if (loc != 48)
  48.         spk = 205;
  49.         else {
  50.         spk = 75;
  51.         obloc[ZWIRE] = loc;
  52.         /* -57=177707 octal  */
  53.  
  54.         obimpr[ZWIRE] = (obimpr[ZWIRE] & -57) + 24;
  55.         for (i = 0; i < 6; i++)
  56.             wirelc[i] = 1000;
  57.         }
  58.     } else {
  59.         if (loc != 42)
  60.         spk = 206;
  61.         else if (spcloc == 1) {
  62.         spk = 75;
  63.         obloc[ZWIRE] = loc;
  64.         /* ~56=177707 octal  */
  65.  
  66.         obimpr[ZWIRE] = (obimpr[ZWIRE] & ~56) + 32;
  67.         for (i = 0; i < 6; i++)
  68.             wirelc[i] = 1000;
  69.         } else
  70.         spk = 207;
  71.     }
  72.     }
  73.     speak(spk);
  74. }
  75.  
  76. vattak()
  77. {
  78.     int             spk;
  79.     spk = 286;
  80.     if (dobjs[0] == VINE && loc == 74 && (obimpr[ZVINE] & 56) == 8) {
  81.     spk = 306;
  82.     if (pct(33))
  83.         spk = 302;
  84.     else if (pct(50))
  85.         spk = 305;
  86.     } else if (dobjs[0] == GUARD) {
  87.     if (loc == guardl || loc == 171 || (chaset != 0 && chaset <= 9))
  88.         spk = 562;
  89.     else
  90.         spk = 561;
  91.     } else if (dobjs[0] == MARTIA && loc >= 27 && loc <= 51)
  92.     spk = 307;
  93.     else if (dobjs[0] == ROBOT || dobjs[0] == FERRET)
  94.     spk = 285;
  95.     speak(spk);
  96. }
  97.  
  98. vbreak()
  99. {
  100.     int             j, hplce, xplce;
  101.     if (iobj != 0 && iobj != HAMMER && iobj != BOULDE) {
  102.     speak(48);
  103.     return;
  104.     }
  105.     if (iobj == HAMMER) {
  106.     itsher(ZHAMME, &hplce);
  107.     if (hplce == 0) {
  108.         speak(329);
  109.         return;
  110.     }
  111.     }
  112.     if (iobj == BOULDE) {
  113.     speak(330);
  114.     return;
  115.     }
  116.     if (dobjs[0] == LOUVER && (loc == 98 || loc == 142)) {
  117.     speak(282);
  118.     obimpr[ZLOUVE] = 9;
  119.     if (iobj == HAMMER)
  120.         obloc[ZHAMME] = 1000;
  121.     return;
  122.     }
  123.     if (dobjs[0] == FERRET || dobjs[0] == ROBOT || dobjs[0] ==
  124.     MARTIA || dobjs[0] == CAT || dobjs[0] == FISH) {
  125.     speak(286);
  126.     return;
  127.     }
  128.     if (dobjs[0] == GUARD) {
  129.     if (loc == guardl || loc == 171 || (chaset != 0 && chaset <= 9))
  130.         speak(562);
  131.     else
  132.         speak(561);
  133.     return;
  134.     }
  135.     j = getobj(dobjs[0], doadjs[0]);
  136.     if (j == -1) {
  137.     speak(70);
  138.     return;
  139.     } else {
  140.     itsher(j, &xplce);
  141.     if (xplce == 0)
  142.         speak(66);
  143.     else if (j > MOVMAX)
  144.         speak(332);
  145.     else if (dobjs[0] == WIRE || dobjs[0] == KNAPSA || dobjs[0] ==
  146.          SHIRT || dobjs[0] == PANTS || dobjs[0] == BOULDE ||
  147.          dobjs[0] == PUCK || dobjs[0] == LATEX || dobjs[0] ==
  148.          NUGGET || dobjs[0] == KNIFE || dobjs[0] == BEAD) {
  149.         speak(48);
  150.         return;
  151.     } else if ((dobjs[0] == KEY || dobjs[0] == SAPPHI || dobjs[0] ==
  152.             DIAMON || dobjs[0] == SPHERE) && iobj != HAMMER)
  153.         speak(385);
  154.     else if (j == ZSEED) {
  155.         if (loc != 131 && loc != 99 && loc != 100) {
  156.         speak(337);
  157.         obimpr[ZSEED] = 0;
  158.         } else if (loc != 100) {
  159.         speak(338);
  160.         obimpr[ZSEED] = 0;
  161.         } else {
  162.         speak(340);
  163.         obimpr[ZSEED] = 3;
  164.         /* seed function here  */
  165.  
  166.         }
  167.         obloc[ZSEED] = 0;
  168.     } else if (j == ZSTATU && loc == 99 && obloc[j] == 99)
  169.         speak(89);
  170.     else if (j == CEGG) {
  171.         speak(480);
  172.         obloc[CEGG] = 0;
  173.         obloc[SCOIN] = loc;
  174.     } else {
  175.         speak(331);
  176.         if (j == GSPHER) {
  177.         speak(333);
  178.         obloc[ZBEAD] = obloc[j];
  179.         }
  180.         if (obloc[j] == 2000 + RSLOT)
  181.         obimpr[RSLOT] = 9;
  182.         obloc[j] = 0;
  183.     }
  184.     }
  185. }
  186.  
  187. vdig()
  188. {
  189.     int             splce, pplce;
  190.     if (dobjs[0] != 0 && dobjs[0] != SHOVEL && dobjs[0] != PITCHF)
  191.     speak(48);
  192.     else if (loc != 73)
  193.     speak(284);
  194.     else {
  195.     itsher(ZSHOVE, &splce);
  196.     itsher(ZPITCH, &pplce);
  197.     if ((dobjs[0] == SHOVEL && splce != 0) ||
  198.         (dobjs[0] == PITCHF && pplce != 0) ||
  199.         (dobjs[0] == 0 && (splce > 0 || pplce > 0))) {
  200.         if (obimpr[RHOLE] != 17)
  201.         speak(283);
  202.         else
  203.         speak(434);
  204.         obimpr[RHOLE] = 17;
  205.     } else if ((dobjs[0] == SHOVEL && splce == 0) || (dobjs[0] ==
  206.                               PITCHF && pplce == 0))
  207.         speak(89);
  208.     else
  209.         speak(234);
  210.     }
  211. }
  212.  
  213.  
  214. vdrink()
  215. {
  216.     int             spk;
  217.     /* pervert!!!!  */
  218.  
  219.     if (dobjs[0] == NPISS) {
  220.     dirty += 1;
  221.     spk = 183;
  222.     }
  223.     /* water is o.k. */
  224.  
  225.     else if (dobjs[0] == WATER) {
  226.     if ((locdat[loc] & 1024) == 1024)
  227.         spk = 184;
  228.     else
  229.         spk = 74;
  230.     } else
  231.     spk = 48;
  232.     speak(spk);
  233. }
  234.  
  235. vdrop()
  236. {
  237.     int             d, i, ambig, ddflg, empty, plce, plural, kkwr, kk, spk;
  238.  
  239.     /* special code for "drop something into bowl" */
  240.  
  241.     if (prepio != 0 && !(prepio == IN && iobj == BOWL)) {
  242.     speak(28);
  243.     return;
  244.     }
  245.     /* convert dobjs(1) (noun) list into list of objects (pointers) */
  246.  
  247.     ambig = !cnvobj();
  248.     if (allflg)
  249.     getall();
  250.     for (i = 0; i < 30; i++) {
  251.     ddflg = 0;
  252.     empty = 1;
  253.     d = dobjs[i];
  254.     if (d == 0)
  255.         continue;
  256.     /* see if it is here */
  257.  
  258.     itsher(d, &plce);
  259.     if (allflg && ((plce != 1 && plce != 2) || d > MOVMAX))
  260.         continue;
  261.     if (dobjs[1] != 0 || allflg)
  262.         speak(odistb[d]);
  263.     plural = (obpprp[d] & 256) == 256;
  264.     if (d > MOVMAX)
  265.         spk = 48;
  266.     else if (plce == 2) {
  267.         spk = 88;
  268.         if (plural)
  269.         spk = 194;
  270.     } else if (d == ZWIRE && plce != 1) {
  271.         for (kkwr = 0; kkwr < 6; kkwr++)
  272.         if (wirelc[kkwr] == 1000)
  273.             wirelc[kkwr] = loc;
  274.         if (obloc[d] == loc && wirelc[5] == loc) {
  275.         for (kkwr = 0; kkwr < 6; kkwr++)
  276.             wirelc[kkwr] = 0;
  277.         }
  278.         spk = 82;
  279.     } else if (plce == 0 || plce == 4 || plce == 5) {
  280.         spk = 89;
  281.         if (plural)
  282.         spk = 195;
  283.     } else if (d == ZSEED && (wrdnum[0] == DROP || wrdnum[0] == THROW)) {
  284.         if (loc == 100) {
  285.         spk = 340;
  286.         obimpr[ZSEED] = 0;
  287.         } else if (loc == 131 || loc == 99) {
  288.         spk = 338;
  289.         obimpr[ZSEED] = 3;
  290.         } else {
  291.         obimpr[ZSEED] = 0;
  292.         spk = 337;
  293.         }
  294.         obloc[ZSEED] = 0;
  295.     } else if (d == CFISH && obloc[d] ==
  296.            (2000 + PLBAG) && (obimpr[PLBAG] / 512 == 5))
  297.         spk = 76;
  298.     /*
  299.      * code for knocking the puck out of the arena loc38 is center of
  300.      * bowl, 23-37 are the rim  
  301.          */
  302.  
  303.     else if (iobj == BOWL) {
  304.         if (loc < 32 || loc > 38)
  305.         spk = 156;
  306.         else {
  307.         if (d == RBOULD && loc != 38) {
  308.             itsher(RBOULD, &plce);
  309.             /* marflg[1] tells if martians are there */
  310.  
  311.             if (marflg[1]) {
  312.             speak(157);
  313.             vdead();
  314.             oldloc = 0;
  315.             oldlc2 = 0;
  316.             return;
  317.             } else {
  318.             if (obloc[HPUCK] == 38) {
  319.                 /*
  320.                  * the next line tells if other rim is low or
  321.                  * high 
  322.                              */
  323.  
  324.                 if ((loc & 1) == 1) {
  325.                 /* we shoot the puck out */
  326.  
  327.                 spk = 158;
  328.                 obloc[RBOULD] = 38;
  329.                 obloc[HPUCK] = loc + 3;
  330.                 if (obloc[HPUCK] > 37)
  331.                     obloc[HPUCK] -= 6;
  332.                 } else {
  333.                 spk = 159;
  334.                 obloc[RBOULD] = 38;
  335.                 }
  336.             } else {
  337.                 /* in this  case it settles back in  */
  338.  
  339.                 if ((loc & 1) == 1) {
  340.                 spk = 160;
  341.                 obloc[RBOULD] = loc + 3;
  342.                 if (obloc[RBOULD] > 37)
  343.                     obloc[RBOULD] -= 6;
  344.                 } else {
  345.                 spk = 161;
  346.                 obloc[RBOULD] = 38;
  347.                 }
  348.             }
  349.             /* smash the other items in the bowl  */
  350.  
  351.             for (kk = 1; kk <= MOVMAX; kk++) {
  352.                 if (kk == RBOULD || kk == HPUCK)
  353.                 continue;
  354.                 if (obloc[kk] == 38) {
  355.                 obloc[kk] = 0;
  356.                 empty = 0;
  357.                 }
  358.             }
  359.             }
  360.         } else {
  361.             spk = 75;
  362.             obloc[d] = 38;
  363.             ddflg = 1;
  364.         }
  365.         }
  366.     } else {
  367.         if (d == ZCAT)
  368.         spk = 334;
  369.         else if (d == RBOULD)
  370.         spk = 335;
  371.         else if (d == ZORCHI && loc == 87)
  372.         spk = 432;
  373.         else if (d == ZFLYTR && loc == 87)
  374.         spk = 433;
  375.         else
  376.         spk = 82;
  377.         obloc[d] = loc;
  378.         ddflg = 1;
  379.     }
  380.     if (d == ZLATEX && ddflg == 1)
  381.         obimpr[d] = 337;
  382.     xindnt += 2;
  383.     speak(spk);
  384.     xindnt -= 2;
  385.     if (empty != 1) {
  386.         xindnt += 4;
  387.         speak(162);
  388.         xindnt -= 4;
  389.     }
  390.     }
  391. }
  392.  
  393. veat()
  394. {
  395.     int             d, l, spk, plce;
  396.     /* don't eat shit  */
  397.  
  398.     if (dobjs[0] == NSHIT) {
  399.     dirty += 1;
  400.     spk = 179;
  401.     }
  402.     /* id love for you to do it, but please don't make mama mad  */
  403.  
  404.     else if (dobjs[0] == ME) {
  405.     dirty += 1;
  406.     spk = 183;
  407.     } else {
  408.     d = getobj(dobjs[0], doadjs[0]);
  409.     /* see if its here */
  410.  
  411.     if (d <= 0) {
  412.         speak(48);
  413.         return;
  414.     }
  415.     itsher(d, &plce);
  416.     if (plce <= 0) {
  417.         spk = 66;
  418.         if ((obpprp[d] & 256) == 256)
  419.         spk = 185;
  420.     } else {
  421.         /* poison!   */
  422.  
  423.         if ((obpprp[d] & 8) == 8) {
  424.         if (d == CFISH && obloc[d] ==
  425.             (2000 + PLBAG) && (obimpr[PLBAG] / 512 == 5)) {
  426.             speak(76);
  427.             return;
  428.         }
  429.         speak(181);
  430.         oldloc = 0;
  431.         oldlc2 = 0;
  432.         if (d <= MOVMAX)
  433.             obloc[d] = 0;
  434.         vdead();
  435.         return;
  436.         }
  437.         /* it's edible, and delicious   */
  438.  
  439.         else if ((obpprp[d] & 4) == 4) {
  440.         spk = 180;
  441.         if (d <= MOVMAX)
  442.             obloc[d] = 0;
  443.         if (d != BBALL)
  444.             eattim = 0;
  445.         if (d == CEGG) {
  446.             spk = 478;
  447.             obloc[SCOIN] = 1000;
  448.         }
  449.         if (d == LETTUC)
  450.             eattim = 150;
  451.         if (d == BBALL) {
  452.             lpill = 1;
  453.             spk = 522;
  454.             bonus += 5;
  455.             dcombi = (qrand() % 31);
  456.             if (dcombi == 0)
  457.             dcombi = 1;
  458.             l = (qrand() % 31);
  459.             if (l == 0)
  460.             l = 22;
  461.             dcombi = dcombi * 32 + l;
  462.             l = (qrand() % 31);
  463.             if (l == 0)
  464.             l = 3;
  465.             dcombi = dcombi * 32 + l;
  466.                 }
  467.         /* inedible  */
  468.  
  469.         } else
  470.         spk = 182;
  471.     }
  472.     }
  473.     speak(spk);
  474. }
  475.  
  476.  
  477.  
  478. vfill()
  479. {
  480.     int             result, z, z2, spk, i, empty, plce;
  481.     result = 0;
  482.     z = dobjs[0];
  483.     spk = 48;
  484.     if (dobjs[0] == FUNNEL && iobj == WATER) {
  485.     result = 1;
  486.     dobjs[0] = WATER;
  487.     iobj = FUNNEL;
  488.     ioadj = doadjs[0];
  489.     doadjs[0] = 0;
  490.     prepio = IN;
  491.     return (result);
  492.     }
  493.     if (dobjs[0] == TUBE) {
  494.     speak(494);
  495.     return (result);
  496.     }
  497.     /* fill the bag or bucket with water or latex  */
  498.  
  499.     empty = 1;
  500.     if (z == BUCKET) {
  501.     for (i = 1; i <= OBJMAX; i++)
  502.         if (obloc[i] == 2039)
  503.         empty = 0;
  504.     }
  505.     if (z == BUCKET && iobj == LATEX && obloc[ZLATEX] == 66 &&
  506.     prepio == WITH && loc == 66) {
  507.     if (obimpr[ZBUCKE] == 1033)
  508.         spk = 274;
  509.     else if (empty == 0)
  510.         spk = 275;
  511.     else {
  512.         obloc[ZLATEX] = 2000 + ZBUCKE;
  513.         obimpr[ZBUCKE] = 1545;
  514.         obimpr[ZLATEX] = 265;
  515.         spk = 75;
  516.     }
  517.     } else if ((z == BAG && (doadjs[0] == 0 || doadjs[0] == PLASTI)) ||
  518.            (z == BUCKET && doadjs[0] == 0)) {
  519.     if ((prepio == WITH && iobj == WATER) ||
  520.         (((locdat[loc] & 1024) == 1024) && prepio == 0
  521.          && iobj == 0)) {
  522.         z2 = ZBUCKE;
  523.         if (z == BAG)
  524.         z2 = PLBAG;
  525.         itsher(z2, &plce);
  526.         if (plce == 0)
  527.         spk = 73;
  528.         else if ((locdat[loc] & 1024) != 1024 && ((obloc[ZBUCKE]
  529.               != loc && obloc[ZBUCKE] != 1000) || obimpr[ZBUCKE]
  530.                               != 1033))
  531.         spk = 74;
  532.         else if (empty == 1) {
  533.         if (z2 == PLBAG)
  534.             obimpr[z2] = 2697;
  535.         else
  536.             obimpr[z2] = 1033;
  537.         spk = 75;
  538.         obloc[z2] = 1000;
  539.         } else
  540.         spk = 275;
  541.     } else if (iobj == 0)
  542.         spk = 278;
  543.     }
  544.     speak(spk);
  545.     return (result);
  546. }
  547.  
  548. vfuck()
  549. {
  550.     if (dirty < 10)
  551.     speak(495);
  552.     else if (dirty > 20)
  553.     speak(497);
  554.     else
  555.     speak(496);
  556. }
  557.  
  558.  
  559. vget()
  560. {
  561.     int             spk, result;
  562.     result = 0;
  563.     spk = 0;
  564.     if (prepdo == IN && dobjs[0] == CHAIR && (loc == 166 ||
  565.                           loc == 175)) {
  566.     spcloc = 2;
  567.     spk = 510;
  568.     }
  569.     /* get up is a joke  */
  570.  
  571.     else if (prepdo == UP) {
  572.     if (dobjs[0] == 0 && spcloc == 2) {
  573.         spk = 511;
  574.         spcloc = 0;
  575.     } else
  576.         spk = 208;
  577.     }
  578.     /* get on or off glass plate   */
  579.  
  580.     else if (dobjs[0] == GLASS && (doadjs[0]
  581.                  == 0 || doadjs[0] == GLASS) && dobjs[1] == 0) {
  582.     if (prepdo == OFF && spcloc == 1) {
  583.         spcloc = 0;
  584.         spk = 75;
  585.     } else if (prepdo == ON && spcloc == 0) {
  586.         spcloc = 1;
  587.         spk = 75;
  588.     }
  589.     }
  590.     /* get something  means take it */
  591.  
  592.     else if (prepdo == ON || prepdo == OFF)
  593.     spk = 71;
  594.     else
  595.     result = 1;
  596.     /* this results in calling vtake  */
  597.  
  598.     if (spk != 0)
  599.     speak(spk);
  600.     return (result);
  601. }
  602.  
  603. vgive()
  604. {
  605.     int             spk, ij, iplce, dj, dplce;
  606.     spk = 0;
  607.     if (iobj == ME)
  608.     spk = 445;
  609.     else if (iobj == GUARD) {
  610.     if (loc == guardl || loc == 171 || (chaset != 0 &&
  611.                         chaset <= 9))
  612.         spk = 562;
  613.     else
  614.         spk = 561;
  615.     } else if (iobj == MARTIA) {
  616.     if (martim == 7 && loc >= 27 && loc <= 51)
  617.         spk = 446;
  618.     else
  619.         spk = 168;
  620.     } else if (iobj == FERRET && !(loc == 131 || loc == 99
  621.                    || loc == 100))
  622.     spk = 447;
  623.     else if (iobj != CAT && iobj != BIRD && iobj != BEES &&
  624.          iobj != FROG && iobj != ROBOT)
  625.     spk = 448;
  626.     else {
  627.     ij = getobj(iobj, ioadj);
  628.     if (iobj == BIRD && ij < 0)
  629.         ij = YBIRD;
  630.     itsher(ij, &iplce);
  631.     if (iplce == 0) {
  632.         if (iobj == CAT)
  633.         spk = 449;
  634.         else if (iobj == BEES)
  635.         spk = 450;
  636.         else if (iobj == FROG)
  637.         spk = 451;
  638.         else if (iobj == ROBOT)
  639.         spk = 452;
  640.         else if (iobj == BIRD)
  641.         spk = 453;
  642.     } else {
  643.         if (iobj == FROG)
  644.         spk = 454;
  645.         else if (iobj == BIRD)
  646.         spk = 455;
  647.     }
  648.     }
  649.     if (spk != 0) {
  650.     speak(spk);
  651.     return;
  652.     }
  653.     dj = getobj(dobjs[0], doadjs[0]);
  654.     if (dj < 0)
  655.     spk = 70;
  656.     else if (dj == 0)
  657.     spk = 28;
  658.     else {
  659.     itsher(dj, &dplce);
  660.     if (dplce == 0) {
  661.         if ((obimpr[dj] & 256) != 0)
  662.         spk = 185;
  663.         else
  664.         spk = 89;
  665.     } else if (obloc[dj] == 2000 + ij)
  666.         spk = 456;
  667.     else if (dj > MOVMAX)
  668.         spk = odistb[dj + 1] - 1;
  669.     else if (dplce > 3)
  670.         spk = 458;
  671.     else;
  672.     }
  673.     if (spk != 0) {
  674.     speak(spk);
  675.     return;
  676.     }
  677.     /* at this point you have it, and someone is here to take it. */
  678.  
  679.     if (iobj == CAT) {
  680.     if (dobjs[0] == FISH) {
  681.         spk = 459;
  682.         obloc[dj] = 0;
  683.     } else if ((obpprp[dj] & 12) != 0)
  684.         spk = 460;
  685.     else
  686.         spk = 461;
  687.     } else if (iobj == FERRET) {
  688.     if (dobjs[0] == EGG || dobjs[0] == FISH || dobjs[0] == CAT) {
  689.         spk = 462;
  690.         obloc[dj] = 0;
  691.     } else if ((obpprp[dj] & 12) != 0)
  692.         spk = 464;
  693.     else {
  694.         spk = 463;
  695.         obloc[dj] = 0;
  696.     }
  697.     } else if (iobj == BEES) {
  698.     if (iobj != ORCHID && iobj != FLYTRA)
  699.         spk = 465;
  700.     else if (iobj == ORCHID) {
  701.         spk = 432;
  702.         obloc[dj] = loc;
  703.     } else {
  704.         spk = 433;
  705.         obloc[dj] = loc;
  706.     }
  707.     } else if (iobj == ROBOT) {
  708.     if (obloc[ZCART] != RSLOT + 2000 && obloc[CCART] != RSLOT + 2000)
  709.         spk = 466;
  710.     else if (obw3[dj] / 256 > 1 || (obw3[dj] & 255) > 2)
  711.         spk = 352;
  712.     else {
  713.         spk = 345;
  714.         obloc[dj] = 2000 + ZROBOT;
  715.     }
  716.     }
  717.     speak(spk);
  718. }
  719.  
  720. vhelp()
  721. {
  722.     speak(105);
  723. }
  724.  
  725.  
  726. vkiss()
  727. {
  728.     int             result, spk, cplce;
  729.     /* if vkiss ends up 1, call vpush */
  730.  
  731.     result = 0;
  732.     if (dobjs[0] == FROG && loc == 67)
  733.     spk = 468;
  734.     else if (dobjs[0] == GUARD) {
  735.     if (loc == guardl || loc == 171 || (chaset != 0 && chaset <= 9))
  736.         spk = 562;
  737.     else
  738.         spk = 561;
  739.     } else if (dobjs[0] == FERRET && (loc == 131 || loc == 100 || loc == 99))
  740.     spk = 469;
  741.     else if (dobjs[0] == CAT) {
  742.     itsher(ZCAT, &cplce);
  743.     if (cplce != 0)
  744.         spk = 470;
  745.     else
  746.         spk = 449;
  747.     } else if (dobjs[0] == ME)
  748.     spk = 471;
  749.     else if (dobjs[0] == BIRD || dobjs[0] == BEES || dobjs[0] == ROBOT)
  750.     spk = 472;
  751.     else
  752.     result = 1;
  753.     if (result == 0)
  754.     speak(spk);
  755.     return (result);
  756. }
  757.  
  758. vlocks()
  759. {
  760.     int             n, plce, spk;
  761.     n = getobj(dobjs[0], doadjs[0]);
  762.     if (n < 0)
  763.     spk = 70;
  764.     else if (n == 0)
  765.     spk = 28;
  766.     else if ((obpprp[n] & 512) != 512 && n != ZBOX)
  767.     spk = 233;
  768.     else {
  769.     itsher(n, &plce);
  770.     if (plce <= 0) {
  771.         if (dobjs[0] == DOOR)
  772.         spk = 225;
  773.         else
  774.         spk = 66;
  775.     } else if (n == ZBOX)
  776.         spk = 389;
  777.     else if (n == ODOOR || n == PDOOR)
  778.         spk = 524;
  779.     else if (prepio == WITH && iobj == KEY) {
  780.         if (n == RDOOR || (n == MDOOR && loc == 41))
  781.         spk = 235;
  782.         else if (n == MDOOR || n == GDOOR) {
  783.         if (wrdnum[0] == LOCK)
  784.             obimpr[n] |= 4;
  785.         else
  786.             obimpr[n] = (obimpr[n] & ~4);
  787.         /* ~4=177773 octal */
  788.  
  789.         spk = 75;
  790.         } else
  791.         spk = 48;
  792.     } else
  793.         spk = 234;
  794.     }
  795.     speak(spk);
  796. }
  797.  
  798.     static   char   strng3[] = "The left dial is set to     and the right to    .";
  799.     static   char   strng4[] = "are     for the left and     for the right.";
  800. vlooks()
  801. /*
  802.  * look or examine 
  803.  */
  804.  
  805. {
  806.     char            cnum[4];
  807.  
  808.     int             kk, zplce, spk, kkwr, lwire, n, plce, u, empty;
  809.  
  810.     if ((prepdo == THROUG && dobjs[0] == TELESC && wrdnum[0] ==
  811.      LOOK) || (wrdnum[0] == EXAMIN && dobjs[0] == PLANET &&
  812.            prepio == WITH && iobj == TELESC)) {
  813.     if (loc >= 175 && loc <= 181)
  814.         spk = loc + 326;
  815.     else if (loc == 184 || loc == 187)
  816.         spk = 507;
  817.     else
  818.         spk = 48;
  819.     speak(spk);
  820.     return;
  821.     }
  822.     if ((loc >= 43 && loc <= 45) && (dobjs[0] == HOLE || dobjs[0]
  823.                      == DOOR)) {
  824.     if (daytim == 1)
  825.         speak(173);
  826.     else
  827.         speak(174);
  828.     return;
  829.     }
  830.     if (dobjs[0] == HOUSE && (doadjs[0] == 0 || doadjs[0] == DOLL)
  831.     && prepdo == IN) {
  832.     if (loc != 132)
  833.         speak(481);
  834.     else if (obimpr[CEGG] > 4096) {
  835.         speak(479);
  836.         obloc[CEGG] = 132;
  837.     } else
  838.         speak(480);
  839.     return;
  840.     }
  841.     /* you can't examine things at night unless they glow  */
  842.  
  843.     if (daytim == 0 && dobjs[0] != SPHERE) {
  844.     speak(120);
  845.     return;
  846.     }
  847.     if (wrdnum[0] == EXAMIN)
  848.     prepdo = AT;
  849.     if (dobjs[0] == TELESC) {
  850.     if ((loc >= 175 && loc <= 181) || loc == 184 || loc == 187)
  851.         speak(534);
  852.     else
  853.         speak(535);
  854.     return;
  855.     }
  856.     /* if you look behind horsetails, there is a cave  */
  857.  
  858.     if (prepio == 0 && prepdo == BEHIND && loc == 169 &&
  859.     dobjs[0] == CABINE) {
  860.     speak(523);
  861.     return;
  862.     }
  863.     if (prepio == 0 && prepdo == BEHIND && loc == 24) {
  864.     if (dobjs[0] == HORSET) {
  865.         speak(119);
  866.         horflg = 1;
  867.         return;
  868.     } else if (dobjs[0] == WATERF) {
  869.         speak(493);
  870.         horflg = 1;
  871.         return;
  872.     }
  873.     }
  874.     /*
  875.      * in the (hockey) bowl you can only see if something is there, not what
  876.      * it is  
  877.      */
  878.  
  879.     if (prepdo == IN && dobjs[0] == BOWL && (loc >= 32 && loc <= 37)) {
  880.     empty = 1;
  881.     for (kk = 1; kk <= MOVMAX; kk++)
  882.         if (obloc[kk] == 38)
  883.         empty = 0;
  884.     if (empty == 1)
  885.         speak(7);
  886.     else
  887.         speak(163);
  888.     return;
  889.     }
  890.     if ((loc == 28) && (dobjs[0] == STOOLS || dobjs[0] == STOOL ||
  891.          dobjs[0] == BOWL) && (doadjs[0] == 0 || doadjs[0] == CERAMI)) {
  892.     speak(176);
  893.     return;
  894.     }
  895.     /* various martian things  */
  896.  
  897.     if (loc == 42 && (dobjs[0] == STOOLS || dobjs[0] == BOWL)) {
  898.     speak(177);
  899.     spcloc = 0;
  900.     return;
  901.     }
  902.     if (loc == 30 && (dobjs[0] == BUILDI || dobjs[0] == WINDOW)
  903.     && prepdo == IN) {
  904.     speak(174);
  905.     return;
  906.     }
  907.     if (dobjs[0] == CACTUS && loc == 82 && wrdnum[0] == EXAMIN) {
  908.     if (pct(25) && (cactsc & 2) == 0) {
  909.         speak(371);
  910.         cactsc += 2;
  911.         if (cactsc == 3)
  912.         speak(439);
  913.     } else if ((cactsc & 1) == 0) {
  914.         speak(370);
  915.         cactsc += 1;
  916.         if (cactsc == 3)
  917.         speak(439);
  918.     } else
  919.         speak(237);
  920.     return;
  921.     }
  922.     if (dobjs[0] == DIAL) {
  923.     itsher(ZBOX, &zplce);
  924.     if (zplce == 0)
  925.         speak(388);
  926.     else {
  927.         numcvt(dial1, cnum);
  928.         strng3[24] = cnum[1];
  929.         strng3[25] = cnum[2];
  930.         strng3[26] = cnum[3];
  931.         numcvt(dial2, cnum);
  932.         strng3[45] = cnum[1];
  933.         strng3[46] = cnum[2];
  934.         strng3[47] = cnum[3];
  935.         linout(strng3, 49);
  936.     }
  937.     return;
  938.     }
  939.     /*
  940.      * special code for anything other than "look at object" or "look in
  941.      * container" gotes above here 
  942.      */
  943.  
  944.     n = getobj(dobjs[0], doadjs[0]);
  945.     if (prepio != 0 || (prepdo != AT && prepdo != IN)) {
  946.     speak(94);
  947.     return;
  948.     }
  949.     if (n == 0) {
  950.     speak(95);
  951.     return;
  952.     } else if (n < 0) {
  953.     speak(70);
  954.     return;
  955.     }
  956.     itsher(n, &plce);
  957.     lwire = 0;
  958.     /* special code for wire in several places at once  */
  959.  
  960.     if (n == ZWIRE) {
  961.     for (kkwr = 0; kkwr < 6; kkwr++)
  962.         if (wirelc[kkwr] == loc)
  963.         lwire = 1;
  964.     }
  965.     if (plce < 1 && !lwire) {
  966.     if ((obpprp[n] & 256) == 256)
  967.         speak(185);
  968.     else
  969.         speak(66);
  970.     return;
  971.     }
  972.     if (plce < 1 && n == ZWIRE && lwire) {
  973.     speak(215);
  974.     return;
  975.     }
  976.     /* the generic "look at" processor  */
  977.  
  978.     if (prepdo == AT) {
  979.     u = (obimpr[n] / 64 % 8);
  980.     if (u == 0) {
  981.         if ((obpprp[n] & 256) == 256)
  982.         speak(193);
  983.         else
  984.         speak(96);
  985.     }
  986.     /* zzzzzzap if not standing on glass while looking at knob  */
  987.  
  988.     else if ((n == ZSTOOL || n == ZKNOB) && spcloc == 1)
  989.         speak(237);
  990.     else if (n == ZANTEN) {
  991.         if (obloc[DCABLE] == 2000 + ZANTEN) {
  992.         speak(odistb[n] + 1);
  993.         obimpr[DCABLE] = 137;
  994.         } else if (obloc[GCABLE] == 2000 + ZANTEN)
  995.         speak(odistb[n] + 2);
  996.         else
  997.         speak(odistb[n] + 3);
  998.     } else {
  999.         if ((n == MMAP || n == NNEWS || n == TMACH || n == NNOTE
  1000.          ) && loc >= 153 && lpill == 1)
  1001.         u += 1;
  1002.         speak(odistb[n] + u);
  1003.         if (n == NNOTE && lpill == 1)
  1004.         nreadx();
  1005.         if (n == ZSCREE && obimpr[n] == 145 && loc == 146)
  1006.         robdsc();
  1007.         if (dobjs[0] == BOX) {
  1008.         numcvt(dial1, cnum);
  1009.         strng3[24] = cnum[1];
  1010.         strng3[25] = cnum[2];
  1011.         strng3[26] = cnum[3];
  1012.         numcvt(dial2, cnum);
  1013.         strng3[45] = cnum[1];
  1014.         strng3[46] = cnum[2];
  1015.         strng3[47] = cnum[3];
  1016.         linout(strng3, 49);
  1017.         }
  1018.         if (dobjs[0] == FILM && obimpr[ZFILM] == 201) {
  1019.         wwflag = 1;
  1020.         speak(odistb[fimage]);
  1021.         wwflag = 0;
  1022.         outst2[0] |= 32;
  1023.                 outst2[kmax] = '.';
  1024.                 outst2[kmax+1] = '\0';
  1025.         linout(outst2, kmax+1);
  1026.         if (fimage == ZBOX) {
  1027.             speak(404);
  1028.             numcvt(dial1x, cnum);
  1029.             strng4[4] = cnum[1];
  1030.             strng4[5] = cnum[2];
  1031.             strng4[6] = cnum[3];
  1032.             numcvt(dial2x, cnum);
  1033.             strng4[25] = cnum[1];
  1034.             strng4[26] = cnum[2];
  1035.             strng4[27] = cnum[3];
  1036.             linout(strng4, 49);
  1037.         }
  1038.         }
  1039.         /*
  1040.          * special code for flags set by looking at or in object goes
  1041.          * below here  
  1042.              */
  1043.  
  1044.         if (n == PPHOTO)
  1045.         horflg = 1;
  1046.     }
  1047.     }
  1048.     if (obpprp[n] / 2048 != 0)
  1049.     xcontn(n);
  1050.     else if (prepdo == IN)
  1051.     speak(97);
  1052.     return;
  1053. }
  1054.  
  1055. vopen()
  1056. {
  1057.     int             spk, n, plce;
  1058.     if (prepdo != 0 && prepio != 0)
  1059.     spk = 21;
  1060.     /* there is no door on the bar to open or close  */
  1061.  
  1062.     else if ((loc == 30 || loc == 42) && dobjs[0] == DOOR)
  1063.     spk = 224;
  1064.     /* open doors or containers  */
  1065.  
  1066.     else {
  1067.     n = getobj(dobjs[0], doadjs[0]);
  1068.     if (dobjs[0] == DOOR && (loc == 184 || loc == 187 ||
  1069.                  (loc >= 176 && loc <= 181)))
  1070.         n = BDOOR;
  1071.     if (n < 0)
  1072.         spk = 70;
  1073.     else if (n == 0)
  1074.         spk = 66;
  1075.     /* if they can be opened */
  1076.  
  1077.     else if ((obpprp[n] % 2) != 1) {
  1078.         if (obpprp[n] / 2048 != 0)
  1079.         spk = 254;
  1080.         else
  1081.         spk = 230;
  1082.     } else {
  1083.         itsher(n, &plce);
  1084.         if (dobjs[0] == DOOR && (loc == 184 || loc == 187 ||
  1085.                      (loc >= 176 && loc <= 181)))
  1086.         plce = 5;
  1087.         if (plce <= 0) {
  1088.         if (dobjs[0] == DOOR)
  1089.             spk = 225;
  1090.         else
  1091.             spk = 66;
  1092.         }
  1093.         /* and aren't locked ,but are closed  */
  1094.  
  1095.         else if ((obimpr[n] & 4) == 4) {
  1096.         if (n == ZBOX)
  1097.             spk = 389;
  1098.         else
  1099.             spk = 228;
  1100.         } else if ((obimpr[n] & 2) == 0)
  1101.         spk = 226;
  1102.         else if (dobjs[0] == DOOR && (loc <= 180 && loc >= 176))
  1103.         spk = 546;
  1104.         else if (dobjs[0] == CABINE && adverb != CAREFU && adverb !=
  1105.              QUIETL)
  1106.         spk = 553;
  1107.         else {
  1108.         spk = 231;
  1109.         obimpr[n] = (obimpr[n] & ~2);
  1110.         /* ~2=177775 octal */
  1111.  
  1112.         if (n == RDOOR || n == MDOOR || n == GDOOR || n ==
  1113.             ODOOR || n == BDOOR)
  1114.             obimpr[n] += 8;
  1115.         if (n == ZDESK && dial1x == -1) {
  1116.             /*
  1117.              * establish the proper setting of the dials when the box
  1118.              * is first seen 
  1119.                      */
  1120.  
  1121.             dial1x = (qrand() % 999) + 1;
  1122.             dial2x = (qrand() % 999) + 1;
  1123.         }
  1124.         }
  1125.     }
  1126.     }
  1127.     speak(spk);
  1128.     if (spk == 553)
  1129.     vdead();
  1130. }
  1131.  
  1132.  
  1133. vpick()
  1134. {
  1135.     int             result;
  1136.     result = 0;
  1137.     /* pick up means take  */
  1138.  
  1139.     if (prepdo == UP) {
  1140.     prepdo = 0;
  1141.     result = 1;
  1142.     }
  1143.     /* this results in calling take  */
  1144.  
  1145.     else if (dobjs[0] == NLOCK && loc == 47)
  1146.     speak(235);
  1147.     else
  1148.     speak(95);
  1149.     return(result);
  1150. }
  1151.  
  1152.  
  1153. vpiss()
  1154. {
  1155.     dirty += 1;
  1156.     {
  1157.     if (loc == 74 && (obimpr[ZVINE] & 56) == 8 && (dobjs[0]
  1158.                     == 0 || dobjs[0] == VINE)) {
  1159.         speak(301);
  1160.         obimpr[ZVINE] += 8;
  1161.     } else if (dirty >= 5 && dirty < 10)
  1162.         speak(40);
  1163.     else if (dirty >= 10) {
  1164.         if (obloc[LPANT] == 3000 || obloc[RPANT] == 3000)
  1165.         speak(41);
  1166.         else
  1167.         speak(42);
  1168.     }
  1169.     }
  1170. }
  1171.  
  1172.  
  1173. vpour()
  1174. {
  1175.     int             result, bplce, pplce, n, plce;
  1176.     result = 0;
  1177.     /* if result set = 1, then call vput  */
  1178.  
  1179.  
  1180.     if (wrdnum[0] == QWATER) {
  1181.     prepio = ON;
  1182.     iobj = dobjs[0];
  1183.     ioadj = doadjs[0];
  1184.     dobjs[0] = WATER;
  1185.     doadjs[0] = 0;
  1186.     }
  1187.     if (dobjs[0] == DEET && prepio == ON && (iobj == ME
  1188.                       || (iobj == VINE && loc == 74))) {
  1189.     itsher(ZDEET, &plce);
  1190.     if (plce == 0)
  1191.         speak(66);
  1192.     else {
  1193.         speak(75);
  1194.         obimpr[ZDEET] = 28762;
  1195.         obloc[ZDEET] = 0;
  1196.     }
  1197.     return (result);
  1198.     }
  1199.     if ((dobjs[0] == DEET || dobjs[0] == METOL || dobjs[0] == HYPO)
  1200.     && iobj == FUNNEL) {
  1201.     wrdnum[0] = PUT;
  1202.     prepio = IN;
  1203.     result = 1;
  1204.     return (result);
  1205.     }
  1206.     if (iobj != 0 && iobj != POLE) {
  1207.     n = getobj(iobj, ioadj);
  1208.     if (n >= 0) {
  1209.         itsher(n, &plce);
  1210.     }
  1211.     if (iobj == FUNNEL && n < 0) {
  1212.         speak(70);
  1213.         return (result);
  1214.     }
  1215.     if (n <= 0 || plce == 0) {
  1216.         speak(48);
  1217.         return (result);
  1218.     }
  1219.     }
  1220.     itsher(ZBUCKE, &bplce);
  1221.     itsher(PLBAG, &pplce);
  1222.     if (dobjs[0] == WATER) {
  1223.     if (bplce != 0 && obimpr[ZBUCKE] == 1033) {
  1224.         if (iobj == FUNNEL) {
  1225.         if (n == LFUNNE || n == RFUNNE) {
  1226.             speak(402);
  1227.             if (obimpr[RLIGHT] != 73) {
  1228.             speak(400);
  1229.             obimpr[RLIGHT] = 73;
  1230.             obimpr[GLIGHT] = 73;
  1231.             }
  1232.             machst |= machst;
  1233.             return(result);
  1234.         } else {
  1235.             if ((machst & 2) == 0)
  1236.             speak(397);
  1237.             machst |= 2;
  1238.             obimpr[ZINDIC] = 145;
  1239.             if ((machst & 16) != 0 && (machst & 1) == 0 &&
  1240.                                        obimpr[RLIGHT] == 73) {
  1241.             speak(399);
  1242.             obimpr[RLIGHT] = 145;
  1243.             obimpr[GLIGHT] = 145;
  1244.             }
  1245.         }
  1246.         } else if (loc != 74 || (obimpr[ZVINE] & 56) != 8)
  1247.         speak(247);
  1248.         else {
  1249.         speak(301);
  1250.         obimpr[ZVINE] = obimpr[ZVINE] + 8;
  1251.         }
  1252.         obimpr[ZBUCKE] = 1545;
  1253.     } else if (pplce != 0 && obimpr[PLBAG] == 2697)
  1254.         speak(248);
  1255.     else
  1256.         speak(48);
  1257.     } else if (dobjs[0] == LATEX && obloc[ZLATEX] == 2000 + ZBUCKE
  1258.            && bplce != 0 && (obimpr[ZLATEX] & 56) == 8) {
  1259.     if (loc != 76 || iobj != POLE) {
  1260.         speak(279);
  1261.         obimpr[ZLATEX] = obimpr[ZLATEX] + 72;
  1262.     } else {
  1263.         speak(75);
  1264.         obimpr[ZLATEX] = obimpr[ZLATEX] + 80;
  1265.     }
  1266.     obloc[ZLATEX] = loc;
  1267.     } else
  1268.     speak(48);
  1269.     return (result);
  1270. }
  1271.  
  1272.  
  1273. vpush()
  1274. {
  1275.     int             result, numbr, ndo, nio, spk, xfilm;
  1276.     result = 0;
  1277.     /* push is also touch   */
  1278.  
  1279.     if ((loc == 165 || loc == 173) && dobjs[0] > 9999) {
  1280.     numbr = dobjs[0] - 10000;
  1281.     if ((loc == 165 && numbr > 30) || (loc == 173 && numbr > 99))
  1282.         speak(532);
  1283.     else if (loc == 165) {
  1284.         pbstat = (pbstat & 1023) * 32 + numbr;
  1285.         if (pbstat == dcombi) {
  1286.         speak(530);
  1287.         /* ~4=177773 octal */
  1288.  
  1289.         obimpr[ODOOR] = (obimpr[ODOOR] & ~4);
  1290.         } else
  1291.         speak(238);
  1292.     } else
  1293.         speak(238);
  1294.     return (result);
  1295.     }
  1296.     if (dobjs[0] == CACTUS && loc == 82) {
  1297.     if (pct(25) && (cactsc & 2) == 0) {
  1298.         speak(371);
  1299.         cactsc = cactsc + 2;
  1300.         if (cactsc == 3)
  1301.         speak(439);
  1302.     } else if ((cactsc & 1) == 0) {
  1303.         speak(370);
  1304.         cactsc = cactsc + 1;
  1305.         if (cactsc == 3)
  1306.         speak(439);
  1307.     } else
  1308.         speak(237);
  1309.     return (result);
  1310.     }
  1311.     if (dobjs[0] == GUARD) {
  1312.     if (loc == guardl || loc == 171 || (chaset != 0 && chaset <= 9))
  1313.         speak(562);
  1314.     else
  1315.         speak(561);
  1316.     return (result);
  1317.     }
  1318.     ndo = 0;
  1319.     nio = 0;
  1320.     if (dobjs[0] != 0)
  1321.     ndo = getobj(dobjs[0], doadjs[0]);
  1322.     if (iobj != 0)
  1323.     nio = getobj(iobj, ioadj);
  1324.     /*
  1325.      * unlocking the door to warehouse by touching wire to it if wire is
  1326.      * connected to knob in bar 
  1327.      */
  1328.  
  1329.     if ((ndo == MDIMPL && nio == ZWIRE && prepio == WITH) ||
  1330.     (ndo == ZWIRE && nio == MDIMPL && prepio == TO) &&
  1331.     loc == 47) {
  1332.     if (obloc[ZWIRE] != loc && wirelc[0] != loc && wirelc[1] !=
  1333.         loc && wirelc[2] != loc && wirelc[3] != loc &&
  1334.         wirelc[4] != loc && wirelc[5] != 1000 && obloc[ZWIRE]
  1335.         != 1000)
  1336.         spk = 213;
  1337.     /* first test is for connection to knob */
  1338.  
  1339.     else if (((obimpr[ZWIRE] / 8) % 8) == 4 && (wirelc[5] == 1000
  1340.                             || wirelc[5] == loc)) {
  1341.         spk = 238;
  1342.         /* ~4=177773 octal */
  1343.  
  1344.         obimpr[RDOOR] = (obimpr[RDOOR] & ~4);
  1345.     } else
  1346.         spk = 237;
  1347.     } else if ((ndo == ZKNOB || nio == ZKNOB) && loc == 42 && spcloc != 1)
  1348.     spk = 207;
  1349.     else if (ndo == ZLOUVE && (loc == 98 || loc == 142) &&
  1350.          obimpr[ZLOUVE] == 1) {
  1351.     spk = 282;
  1352.     obimpr[ZLOUVE] = 9;
  1353.     } else if (dobjs[0] == BUTTON) {
  1354.     if (ndo == -1)
  1355.         spk = 70;
  1356.     else if (ndo == SBUTTO && loc == 146) {
  1357.         locdat[144] |= 16;
  1358.         locdat[145] |= 16;
  1359.         locdat[147] |= 16;
  1360.         locdat[148] |= 16;
  1361.         locdat[150] |= 16;
  1362.         spk = 238;
  1363.     } else if (ndo == RBUTTO && loc == 146) {
  1364.         speak(383);
  1365.         result = 1;
  1366.         return(result);
  1367.     } else if (ndo == HBUTTO && loc == 146) {
  1368.         if (easttm == 0)
  1369.         easttm = 1;
  1370.         spk = 238;
  1371.     } else if (ndo == TBUTTO && loc == 146) {
  1372.         if (easttm == 51)
  1373.         easttm = 52;
  1374.         spk = 238;
  1375.     } else if (ndo == GBUTTO && loc == 169) {
  1376.         if (adverb == TWICE) {
  1377.         spk = 525;
  1378.         obimpr[HMURAL] = 209;
  1379.         bonus = bonus + 5;
  1380.         chaset = 1;
  1381.         oldlc2 = 0;
  1382.         oldloc = 0;
  1383.         } else
  1384.         spk = 238;
  1385.     } else if (ndo == RDBUTT && loc == 143) {
  1386.         if ((machst & 51) != 18)
  1387.         spk = 237;
  1388.         else {
  1389.         speak(398);
  1390.         xfilm = (filmtm % 1000);
  1391.         if (xfilm >= 3 && xfilm <= 6 && filmtm < 2000 && machst == 30) {
  1392.             if (filmst == 0)
  1393.             obimpr[ZFILM] = obimpr[ZFILM] + 64;
  1394.             else
  1395.             obimpr[ZFILM] = obimpr[ZFILM] + 128;
  1396.         } else if ((machst & 12) != 12)
  1397.             obimpr[ZFILM] = obimpr[ZFILM] + 192;
  1398.         else;
  1399.         obloc[ZFILM] = 2000 + ZHOPPE;
  1400.         machst = 33;
  1401.         return (result);
  1402.         }
  1403.     } else if (loc == 134 && (ndo == VBUTTO || ndo == OBUTTO ||
  1404.                   ndo == WBUTTO || ndo == BBUTTO)) {
  1405.         if (obloc[GDISC] == 2000 + ZRECES && rvtim != 2)
  1406.         spk = 411;
  1407.         else if (obloc[GDISC] == 2000 + ZRECES && rvtim == 2 &&
  1408.              obloc[GCABLE] != 2000 + ZANTEN)
  1409.         spk = 421;
  1410.         else if (obloc[GDISC] == 2000 + ZRECES && rvtim == 2) {
  1411.         if (ndo == VBUTTO) {
  1412.             spk = 415;
  1413.             result = 2;
  1414.         } else if (ndo == OBUTTO) {
  1415.             spk = 416;
  1416.             result = 3;
  1417.         } else if (ndo == BBUTTO) {
  1418.             spk = 417;
  1419.             result = 4;
  1420.         } else {
  1421.             spk = 418;
  1422.             result = 5;
  1423.         }
  1424.         } else
  1425.         spk = 238;
  1426.     } else
  1427.         spk = 419;
  1428.     } else
  1429.     spk = 236;
  1430.     speak(spk);
  1431.     return (result);
  1432. }
  1433.